PostgreSQL WAL日志 简介
1 背景知识
事务日志(transaction log)是数据库的关键组件,因为当出现系统故障时,任何数据库管理系统都不允许丢失数据。
事务日志是数据库系统中所有 变更(change) 与 **行为(action)**的历史记录,当诸如电源故障,或其他服务器错误导致服务器崩溃时,它被用于确保数据不会丢失。由于日志包含每个已执行事务的相关充分信息,因此当服务器崩溃时,数据库服务器应能通过重放事务日志中的变更与行为来恢复数据库集群。
在计算机科学领域,WAL是Write Ahead Logging的缩写,它指的是将变更与行为写入事务日志的协议或规则;而在PostgreSQL中,WAL是Write Ahead Log的缩写。在这里它被当成事务日志的同义词,而且也用来指代一种将行为写入事务日志(WAL)的实现机制。虽然有些令人困惑, 但本文将使用PostgreSQL中的定义。
WAL机制在7.1版本中首次被实现,用以减轻服务器崩溃的影响。它还是**时间点恢复(Point-in-Time Recovery PIRT)与流复制(Streaming Replication, SR)**实现的基础,这两者将分别在 备份与恢复 和 流复制中介绍。
尽管理解WAL机制对于管理、集成PostgreSQL非常重要,但由于它的复杂性,不可能做到简要介绍。因此本章将会对WAL做一个完整的解释。第一节描绘了WAL的全貌,介绍了一些重要的概念与关键词。接下来的小节中会依次讲述其他主题:
- 事务日志(WAL)的逻辑结构与物理结构
- WAL数据的内部布局
- WAL数据的写入
- WAL写入者进程
- 检查点过程
- 数据库恢复流程
- 管理WAL段文件
- 持续归档
第一个WAL段文件名是